<template>
	<view class="page">
		<custom-navigation :title="title">
		</custom-navigation>

		<view class="head-contaienr" v-if="info!=null">
			<view class="item flex-row-center">
				<view class="value">单据编号：{{info.loss_no}}</view>
				<view :class="info.loss_state=='已提交'?'bluebtn':'redbtn'">{{info.loss_state}} </view>
			</view>
			<view class="item flex-row-center">
				<view class="value">制单日期：{{info.create_time}}</view>
			</view>
		</view>
		<view class="head-item flex-row-center" @click="dialogRemark=remark;remarkDialogShow=true"> 
			
			<view class="title" style="flex: 0.4;">报损备注</view>
			<view class="value u-line-2" style="text-align: end;flex: 1;">{{remark}}</view>
			
			<image src="/static/arrow-blackmin.png"></image>
		</view>

		<view class="head-item flex-row-center">
			<view class="title">商品明细</view>
			<view class="add-goods" @click="$navigateTo('/pages/goods/goods_info?selectMode=true&lossReprotingSelect=true')">选择商品</view>
		</view>


		<scroll-view scroll-y="true" class="body-scroll" style="margin-top: 20rpx;">
			<view class="item-view" v-for="(item,index) in goodsList" @click="itemOnClick(item)">
				<view class="name">{{item.goods_name}}</view>
				<view class="flex-row-center" style="flex: 1;">
					<view style="flex: 1; margin: 4rpx 0;">{{item.goods_barcode}}</view>
					<view>报损数量：{{item.loss_num}}</view>

				</view>
				<view class="flex-row-center">
					<view style="flex: 1;margin: 4rpx 0;">进货价格：￥{{item.cost_price}}</view>
					<view>报损金额：￥{{toAmount(item)}}</view>

				</view>
				<image src="../../static/remove.png" @click.stop="remove(index)"></image>
			</view>
		</scroll-view>
		<view class="total-box flex-row-center">
			共{{goodsList.length}}种，{{getAllQty()}}件商品
		</view>
		<view class="bottom-container flex-row-center">
			<view class="item" @click="save(0)">保存草稿</view>
			<view class="item1" @click="save(1)">提交</view>
		</view>


		<drag-button
		            :isDock="true"
		            :existTabBar="true"
		            @btnClick="qrcode"
		            @btnTouchstart="btnTouchstart"
		            @btnTouchend="btnTouchend" />

		<u-mask :show="remarkDialogShow" mode="center" bgColor="transparent" class="flex-column-center"
			style="justify-content: center;">

			<view class="remark-dialog flex-column">
				<view class="title-box">
					<view class="text">备注</view>
					<image src="../../static/close.png" @click.stop="remarkDialogShow=false"></image>
				</view>
				<view class="line"></view>
				<textarea class="input" placeholder="请输入备注" v-model="dialogRemark"></textarea>
				<view class="boottom-btn-box flex-row">
					<view class="left-btn" @click="remarkDialogShow=false">取消</view>
					<view class="right-btn" @click="rightAction">确定</view>
				</view>
			</view>
		</u-mask>
		<u-mask :show="editGoodsDialogShow" mode="bottom" bgColor="transparent" class="flex-column-center"
			style="justify-content: flex-end;" @click="editGoodsDialogShow=false">
			<view @tap.stop>

				<view :class="editGoodsDialogShow?'showDialog':''" @tap.stop>

					<view class="r" @tap.stop>{{currGoodsInfo.goods_name}}</view>
					<view class="r" @tap.stop>{{currGoodsInfo.goods_barcode}}</view>
					<view class="r" @tap.stop>单位：{{currGoodsInfo.goods_unit_name||currGoodsInfo.goods_unit}}</view>
					<view class="r flex-row-center" @tap.stop>报损数量：<input placeholder="请输入" v-model="currInputNum" @input="e=> {
										e.target.value = e.target.value.replace(/^0|[^\d]|[.]/g, '')
										  $nextTick(() => {
											currInputNum= e.target.value
										  })
									}" />
					</view>
					<view class="r" @tap.stop>进货价格：￥{{currGoodsInfo.cost_price}}</view>
					<view class="r" @tap.stop>报损金额：￥{{toAmount(currGoodsInfo)}}</view>
					<view class="bottom-box flex-row-center" @tap.stop>
						<view class="cancel" @click="editGoodsDialogShow=false">取消</view>
						<view class="confirm" @click="confirmEntry">确定</view>
					</view>
				</view>
			</view>
		</u-mask>

	</view>
</template>

<script>
	import {
		fatherAndSonUpdates,
		fatherAndSonAdds
	} from '@/common/api/parameter_tool.js'
	export default {
		data() {
			return {
				editGoodsDialogShow: false,
				currGoodsInfo: {},
				remarkDialogShow: false,
				title: "新增报损",
				remark: "",
				dialogRemark: "",
				currInputNum: '1',
				currInputPrice: '',
				goodsList: [],
				info: null,
				delIds:null
			}
		},
		onLoad(options) {
			if (options.info != null) {
				this.info = JSON.parse(options.info)
				this.remark = this.info.remark
				this.title = "编辑报损"
				this.getData()
			}
		},
		onShow() {
			let list = uni.getStorageSync("multipleSelectList")
			if (list != null) {
				for (let i in list) {
					list[i].id = null;
					list[i].loss_num="1"
					list[i].cost_price = list[i].purchase_price
					list[i].sale_amount = list[i].sale_price
				}
				let listbars = [];
				for (let i in this.goodsList) {
					listbars.push(this.goodsList[i].goods_barcode);
				}
				
				for (let i in list) {
					let barcode = list[i].goods_barcode;
					if (listbars.indexOf(barcode) == -1) {
						this.goodsList.push(list[i]);
					}
				}
				uni.setStorageSync("multipleSelectList", null)
			}
		},
		methods: {
			toAmount(item){
				return (item.loss_num*item.cost_price).toFixed(2)*1
			},
			confirmEntry() { 
				if(parseFloat(this.currInputNum)<1||this.currInputNum.length==0){
					this.$showToast('数量必须大于0')
					return;
				}
				this.currGoodsInfo.loss_num = this.currInputNum;
				this.currGoodsInfo.purchase_price = this.currInputPrice;
				this.editGoodsDialogShow = false;
			},
			itemOnClick(item) {
				this.currGoodsInfo = item;
				this.currInputNum = (this.currGoodsInfo.loss_num??"1")+"";
				this.currInputPrice = this.currGoodsInfo.purchase_price;
				this.editGoodsDialogShow = true;
			},
			rightAction() {
				this.remark = this.dialogRemark;
				this.remarkDialogShow = false;
			},
			getAllQty() {
				let countQty = 0;
				for (let i in this.goodsList) {
					countQty += parseInt(this.goodsList[i].loss_num ?? '0')
				}
				return countQty;
			},
			remove(index) { 
					if (this.delIds == null) this.delIds = []
					this.delIds.push(this.goodsList[index].id)
				this.goodsList.splice(index, 1)
			},
			getAmount(item) {
				return (item.purchase_price ?? 0) * (item.loss_num ?? 1)
			},
			qrcode() {
				// this.qrcodeSearch("1667031567808")
				let ths = this;
				dsBridge.call("QRCode", {}, function(res) {
					if (res) {
						ths.qrcodeSearch(res)

					}
				})
			},
			qrcodeSearch(qrcode) {
				uni.showLoading({
					title: "加载中..."
				})
				this.$apiPost("/retail/select/srvretail_goods_info_select", {
					serviceName: "srvretail_goods_info_select",
					condition: [{
						"colName": "goods_barcode",
						"ruleType": "like",
						"value": qrcode
					}],
					page: {
						"pageNo": 1,
						"rownumber": 500
					},
					"colNames": ["*"]
				}).then(res => {
					uni.hideLoading()
					if (res.data.length > 0) {
						res.data[0].id=null
						res.data[0].cost_price = res.data[0].purchase_price
						res.data[0].sale_amount = res.data[0].sale_price
						for (let i in this.goodsList) {
							if (this.goodsList[i].goods_barcode == qrcode) {
								this.goodsList[i].loss_num = (parseInt(this.goodsList[i].loss_num ?? "1") + 1) + ""
								return;
							}
						}
						res.data[0].loss_num = "1"
						res.data[0].id = null;
						this.goodsList.push(res.data[0])
					} else {
						this.$showToast('没有找到该条码')
					}
				})
			},
			save(type) { //type 0 保存草稿，1 提交。
				uni.showLoading({
					title: "加载中..."
				})

				let datas = [];
				for (let i in this.goodsList) {
					let item = this.goodsList[i]
					datas.push({
						"id": item.id,
						"goods_no": item.goods_no,
						"goods_barcode": item.goods_barcode,
						"goods_name": item.goods_name,
						"loss_num": item.loss_num,
						"goods_unit": item.goods_unit_name ?? item.goods_unit,
						"sale_price": item.sale_price,
						"loss_reason": "其他原因",

						// "goods_no": "SP202211080002",
						// "goods_barcode": "1667871586427",
						// "goods_name": "骆驼户外(CAMEL) 冬季防寒冲锋衣男女三合一两件套防风登山服男 A1W21a8150碳灰XL大码",
						// "loss_num": 1,
						// "goods_unit": "件",
						// "cost_price": 355.55,
						// "cost_amount": 355.55,
						// "sale_price": 679.37,
						// "sale_amount": 679.37,
						// "loss_reason": "其他原因"
					})
				}

				if(!datas.length){
					this.$showToast('请选择商品')
					return;
				}


				var params = undefined;
				if (this.info?.id == undefined) { //add
					params = fatherAndSonAdds("srvretail_loss_reporting_add", "srvretail_loss_reporting_detail_add",
						"loss_no", "loss_state", type == 0 ? '待提交' : '已提交', datas)
				} else {
					params = fatherAndSonUpdates("srvretail_loss_reporting_update", this.info.id,
						"srvretail_loss_reporting_detail_update",
						"loss_no", "loss_state", type == 0 ? '待提交' : '已提交', datas)
				}

				params[0].data[0].remark = this.remark;
				params[0].data[0].channel_source=this.$SystemType;

				if (this.delIds != null) {
					var delparList = [];
					for (let i in this.delIds) {
						delparList.push({
							serviceName: "srvretail_loss_reporting_detail_delete",
							condition: [{
								"colName": "id",
								"ruleType": "eq",
								"value": this.delIds[i]
							}]
				
						})
					}
					params[0].data[0].child_data_list.push(...delparList)
				}
				this.$apiPost(this.info ? "/retail/operate/srvretail_loss_reporting_update" :
					"/retail/operate/srvretail_loss_reporting_add", params).then(res => {
					uni.hideLoading()
					uni.setStorageSync("refresh", true)
					if (res.state == "SUCCESS") {
						uni.showToast({
							title: "成功！",
							mask: true
						})

						setTimeout(() => {
							uni.navigateBack()
						}, 1500)
					}
				})

			},

			getData() {
				uni.showLoading({
					title: "加载中..."
				})
				this.$apiPost("/retail/select/srvretail_loss_reporting_detail_select", {
					"serviceName": "srvretail_loss_reporting_detail_select",
					"colNames": ["*"],
					"condition": [{
						"colName": "loss_no",
						"ruleType": "eq",
						"value": this.info.loss_no
					}],
					"relation_condition": {},
					"page": {
						"pageNo": 1,
						"rownumber": 500
					}
				}).then(res => {
					uni.hideLoading()
					this.goodsList = res.data;
				})
			}
		}
	}
</script>

<style scoped lang="scss">
	.head-contaienr {
		background-color: white;

		.item {
			padding: 20rpx 20rpx;

			.value {
				flex: 1;
				font-size: 32rpx;
				font-weight: 500;
				color: rgba(51, 51, 51, 1);
			}
		}

		.bluebtn {
			width: 124rpx;
			height: 48rpx;
			text-align: center;
			line-height: 48rpx;
			border-radius: 4rpx;
			border: 2rpx solid rgba(56, 192, 158, 1);
			margin-right: 22rpx;
			font-size: 28rpx;
			font-weight: 500;
			color: rgba(56, 192, 158, 1);
		}

		.redbtn {
			width: 124rpx;
			height: 48rpx;
			text-align: center;
			line-height: 48rpx;
			border-radius: 4rpx;
			border: 2rpx solid rgba(212, 48, 48, 1);
			margin-right: 22rpx;
			font-size: 28rpx;
			font-weight: 500;
			color: rgba(212, 48, 48, 1);
		}
	}

	.head-item {
		padding-left: 20rpx;
		padding-right: 24rpx;
		min-height: 100rpx;
		background-color: white;
		margin-bottom: 2rpx;

		.title {
			font-size: 32rpx;
			font-weight: 500;
			color: rgba(0, 0, 0, 1);
			flex: 1;
		}

		.value {
			font-size: 28rpx;
			font-weight: 500;
		}

		image {
			margin-left: 16rpx;
			width: 8rpx;
			height: 16rpx;

		}

		.add-goods {
			box-sizing: content-box;
			width: 160rpx;
			height: 60rpx;
			line-height: 60rpx;
			text-align: center;
			border-radius: 60rpx;
			border: 1px solid rgba(212, 48, 48, 1);
			font-size: 30rpx;
			font-weight: 400;
			color: rgba(212, 48, 48, 1);
		}
	}

	.remark-dialog {
		width: 560rpx;
		justify-content: center;
		border-radius: 20rpx;
		background: rgba(255, 255, 255, 1);
		padding-top: 34rpx;

		.title-box {
			font-size: 18px;
			font-weight: 700;
			color: rgba(51, 51, 51, 1);
			position: relative;

			.text {
				width: 540rpx;
				text-align: center;
			}

			image {
				width: 52rpx;
				position: absolute;
				right: 10rpx;
				top: 0;
				height: 52rpx;
			}
		}

		.line {
			margin-top: 14rpx;
			height: 2rpx;
			width: 100%;
			background-color: rgba(225, 225, 225, 1);
		}

		.input {
			width: 464rpx;
			height: 210rpx;
			margin-left: 48rpx;
			margin-top: 44rpx;
			margin-bottom: 60rpx;
			border: 2rpx solid rgba(241, 241, 241, 1);
			padding: 20rpx;
			box-sizing: border-box;
			color: rgba(153, 153, 153, 1);
			font-size: 24rpx;
			font-weight: 500;
		}


		.boottom-btn-box {
			width: 100%;
			height: 100rpx;
			border-radius: 0 0 20rpx 20rpx;
			font-size: 36rpx;
			font-weight: 700;
			border-top: 2rpx solid rgba(224, 222, 222, 1);

			.left-btn {
				flex: 1;
				line-height: 100rpx;
				text-align: center;
				color: rgba(56, 192, 158, 1);
				border-right: 1rpx solid rgba(224, 222, 222, 1);
			}

			.right-btn {
				flex: 1;
				line-height: 100rpx;
				text-align: center;
			}
		}
	}

	.total-box {
		padding-left: 24rpx;
		height: 80rpx;
		opacity: 1;
		background: rgba(227, 227, 227, 1);
		font-size: 24rpx;
		font-weight: 500;
		color: rgba(0, 0, 0, 1);
	}

	.item-view {
		padding: 26rpx 20rpx 0 24rpx;
		padding-bottom: 18rpx;
		background: rgba(255, 255, 255, 1);
		border-bottom: 2rpx solid rgba(245, 245, 247, 1);
		;
		position: relative;

		.name {
			font-size: 28rpx;
			font-weight: 700;
			color: rgba(51, 51, 51, 1);

		}

		view {
			flex: 0.8;
			font-size: 28rpx;
			font-weight: 500;
			color: rgba(51, 51, 51, 1);
			margin-right: 25rpx;
		}

		image {
			width: 40rpx;
			height: 40rpx;
			position: absolute;
			right: 24rpx;
			top: 66rpx;
		}
	}

	.qrcode-img {
		width: 140rpx;
		height: 140rpx;
		position: fixed;
		bottom: 268rpx;
		right: 24rpx;
	}

	.bottom-container {
		background-color: white;
		box-shadow: 0 -16rpx 16rpx 1rpx #00000008;
		height: 146rpx;
		padding: 0 24rpx;
		justify-content: space-around;

		.item {
			border-radius: 40rpx;
			line-height: 80rpx;
			text-align: center;
			border: 2rpx solid #333333FF;
			width: 192rpx;
			height: 80rpx;
			font-size: 30rpx;
			font-weight: 500;

		}

		.item1 {
			border-radius: 40rpx;
			line-height: 80rpx;
			text-align: center;
			border: 2rpx solid rgba(56, 192, 158, 1);
			background-color: rgba(56, 192, 158, 1);
			color: white;
			width: 192rpx;
			height: 80rpx;
			font-size: 30rpx;
			font-weight: 500;
		}

		.text {
			flex: 1;
			margin-left: 60rpx;
			font-size: 30rpx;
			font-weight: 700;

		}

		.btn {
			margin-right: 34rpx;
			width: 192rpx;
			height: 80rpx;
			border-radius: 40rpx;
			background: rgba(56, 192, 158, 1);
			font-size: 30rpx;
			font-weight: 700;
			color: white;
			text-align: center;
			line-height: 80rpx;
		}
	}


	.showDialog {
		animation: showDialog 0.3s ease-out;
		padding-top: 54rpx;
		width: 750rpx;
		border-radius: 40rpx 40rpx 0 0;
		background: rgba(255, 255, 255, 1);

		.r {
			padding-left: 44rpx;
			margin-bottom: 20rpx;
			font-size: 30rpx;
			font-weight: 500;
			color: rgba(0, 0, 0, 1);

			input {
				height: 48rpx;
				line-height: 48rpx;
				padding: 0 5rpx;
				text-align: center;
				opacity: 1;
				border-radius: 4rpx;
				border: 1px solid rgba(153, 153, 153, 1);
			}
		}

		.bottom-box {
			margin-top: 55rpx;
			box-shadow: 0 -32rpx 32rpx 2rpx rgba(245, 245, 247, 1);

			.cancel {
				flex: 1;
				height: 146rpx;
				line-height: 146rpx;
				text-align: center;
				font-size: 32rpx;
				font-weight: 700;
				color: black;
				background-color: white;
			}

			.confirm {
				flex: 1;
				height: 146rpx;
				line-height: 146rpx;
				text-align: center;
				font-size: 32rpx;
				font-weight: 700;
				color: white;
				background-color: rgba(56, 192, 158, 1);
				;
			}
		}

	}

	// 呼吸帧
	@keyframes showDialog {
		0% {
			transform: translate(0%, 100%);
		}

		100% {
			transform: translate(0%, 0%);
		}

	}
</style>
